{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# A Transfer Learning and Optimized CNN Based Intrusion Detection System for Internet of Vehicles \n",
    "This is the code for the paper entitled \"**A Transfer Learning and Optimized CNN Based Intrusion Detection System for Internet of Vehicles**\" accepted in IEEE International Conference on Communications (IEEE ICC).  \n",
    "Authors: Li Yang (lyang339@uwo.ca) and Abdallah Shami (Abdallah.Shami@uwo.ca)  \n",
    "Organization: The Optimized Computing and Communications (OC2) Lab, ECE Department, Western University\n",
    "\n",
    "**Notebook 1: Data pre-processing**  \n",
    "Procedures:  \n",
    "&nbsp; 1): Read the dataset  \n",
    "&nbsp; 2): Transform the tabular data into images  \n",
    "&nbsp; 3): Display the transformed images  \n",
    "&nbsp; 4): Split the training and test set  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import os\n",
    "import cv2\n",
    "import math\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import shutil\n",
    "from sklearn.preprocessing import QuantileTransformer\n",
    "from PIL import Image\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Read the Car-Hacking/CAN-Intrusion dataset\n",
    "The complete Car-Hacking dataset is publicly available at: https://ocslab.hksecurity.net/Datasets/CAN-intrusion-dataset  \n",
    "In this repository, due to the file size limit of GitHub, we use the 5% subset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Read dataset\n",
    "df=pd.read_csv('data/Car_Hacking_5%.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CAN ID</th>\n",
       "      <th>DATA[0]</th>\n",
       "      <th>DATA[1]</th>\n",
       "      <th>DATA[2]</th>\n",
       "      <th>DATA[3]</th>\n",
       "      <th>DATA[4]</th>\n",
       "      <th>DATA[5]</th>\n",
       "      <th>DATA[6]</th>\n",
       "      <th>DATA[7]</th>\n",
       "      <th>Label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1201</td>\n",
       "      <td>41</td>\n",
       "      <td>39</td>\n",
       "      <td>39</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>154</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>809</td>\n",
       "      <td>64</td>\n",
       "      <td>187</td>\n",
       "      <td>127</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>32</td>\n",
       "      <td>0</td>\n",
       "      <td>20</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1349</td>\n",
       "      <td>216</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>136</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1201</td>\n",
       "      <td>41</td>\n",
       "      <td>39</td>\n",
       "      <td>39</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>154</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>228</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>818435</th>\n",
       "      <td>848</td>\n",
       "      <td>5</td>\n",
       "      <td>32</td>\n",
       "      <td>52</td>\n",
       "      <td>104</td>\n",
       "      <td>117</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>818436</th>\n",
       "      <td>1088</td>\n",
       "      <td>255</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>255</td>\n",
       "      <td>134</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>818437</th>\n",
       "      <td>848</td>\n",
       "      <td>5</td>\n",
       "      <td>32</td>\n",
       "      <td>100</td>\n",
       "      <td>104</td>\n",
       "      <td>117</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>92</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>818438</th>\n",
       "      <td>1349</td>\n",
       "      <td>216</td>\n",
       "      <td>90</td>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>818439</th>\n",
       "      <td>790</td>\n",
       "      <td>5</td>\n",
       "      <td>33</td>\n",
       "      <td>48</td>\n",
       "      <td>10</td>\n",
       "      <td>33</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>111</td>\n",
       "      <td>R</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>818440 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        CAN ID  DATA[0]  DATA[1]  DATA[2]  DATA[3]  DATA[4]  DATA[5]  DATA[6]  \\\n",
       "0         1201       41       39       39       35        0        0        0   \n",
       "1          809       64      187      127       20       17       32        0   \n",
       "2         1349      216        0        0      136        0        0        0   \n",
       "3         1201       41       39       39       35        0        0        0   \n",
       "4            2        0        0        0        0        0        3        2   \n",
       "...        ...      ...      ...      ...      ...      ...      ...      ...   \n",
       "818435     848        5       32       52      104      117        0        0   \n",
       "818436    1088      255        0        0        0      255      134        9   \n",
       "818437     848        5       32      100      104      117        0        0   \n",
       "818438    1349      216       90        0      137        0        0        0   \n",
       "818439     790        5       33       48       10       33       30        0   \n",
       "\n",
       "        DATA[7] Label  \n",
       "0           154     R  \n",
       "1            20     R  \n",
       "2             0     R  \n",
       "3           154     R  \n",
       "4           228     R  \n",
       "...         ...   ...  \n",
       "818435       12     R  \n",
       "818436        0     R  \n",
       "818437       92     R  \n",
       "818438        0     R  \n",
       "818439      111     R  \n",
       "\n",
       "[818440 rows x 10 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "R        701832\n",
       "RPM       32539\n",
       "gear      29944\n",
       "DoS       29501\n",
       "Fuzzy     24624\n",
       "Name: Label, dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The labels of the dataset. \"R\" indicates normal patterns, and there are four types of attack (DoS, fuzzy. gear spoofing, and RPM spoofing zttacks)\n",
    "df.Label.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Data Transformation\n",
    "Convert tabular data to images\n",
    "Procedures:\n",
    "1. Use quantile transform to transform the original data samples into the scale of [0,255], representing pixel values\n",
    "2. Generate images for each category (Normal, DoS, Fuzzy, Gear, RPM), each image consists of 27 data samples with 9 features. Thus, the size of each image is 9*9*3, length 9, width 9, and 3 color channels (RGB)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Transform all features into the scale of [0,1]\n",
    "numeric_features = df.dtypes[df.dtypes != 'object'].index\n",
    "scaler = QuantileTransformer() \n",
    "df[numeric_features] = scaler.fit_transform(df[numeric_features])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Multiply the feature values by 255 to transform them into the scale of [0,255]\n",
    "df[numeric_features] = df[numeric_features].apply(\n",
    "    lambda x: (x*255))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CAN ID</th>\n",
       "      <th>DATA[0]</th>\n",
       "      <th>DATA[1]</th>\n",
       "      <th>DATA[2]</th>\n",
       "      <th>DATA[3]</th>\n",
       "      <th>DATA[4]</th>\n",
       "      <th>DATA[5]</th>\n",
       "      <th>DATA[6]</th>\n",
       "      <th>DATA[7]</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "      <td>818440.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>127.458603</td>\n",
       "      <td>113.635407</td>\n",
       "      <td>108.055500</td>\n",
       "      <td>89.524039</td>\n",
       "      <td>109.930495</td>\n",
       "      <td>105.682464</td>\n",
       "      <td>112.273096</td>\n",
       "      <td>84.945440</td>\n",
       "      <td>93.094805</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>73.780402</td>\n",
       "      <td>89.993275</td>\n",
       "      <td>93.448831</td>\n",
       "      <td>100.589117</td>\n",
       "      <td>103.632690</td>\n",
       "      <td>95.716420</td>\n",
       "      <td>90.993393</td>\n",
       "      <td>101.365609</td>\n",
       "      <td>100.186463</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>66.876877</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>122.650150</td>\n",
       "      <td>126.096096</td>\n",
       "      <td>115.503003</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>130.818318</td>\n",
       "      <td>127.755255</td>\n",
       "      <td>129.542042</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>190.548048</td>\n",
       "      <td>192.462462</td>\n",
       "      <td>193.611111</td>\n",
       "      <td>199.099099</td>\n",
       "      <td>190.675676</td>\n",
       "      <td>193.355856</td>\n",
       "      <td>190.165165</td>\n",
       "      <td>192.207207</td>\n",
       "      <td>190.675676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "      <td>255.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              CAN ID        DATA[0]        DATA[1]        DATA[2]  \\\n",
       "count  818440.000000  818440.000000  818440.000000  818440.000000   \n",
       "mean      127.458603     113.635407     108.055500      89.524039   \n",
       "std        73.780402      89.993275      93.448831     100.589117   \n",
       "min         0.000000       0.000000       0.000000       0.000000   \n",
       "25%        66.876877       0.000000       0.000000       0.000000   \n",
       "50%       122.650150     126.096096     115.503003       0.000000   \n",
       "75%       190.548048     192.462462     193.611111     199.099099   \n",
       "max       255.000000     255.000000     255.000000     255.000000   \n",
       "\n",
       "             DATA[3]        DATA[4]        DATA[5]        DATA[6]  \\\n",
       "count  818440.000000  818440.000000  818440.000000  818440.000000   \n",
       "mean      109.930495     105.682464     112.273096      84.945440   \n",
       "std       103.632690      95.716420      90.993393     101.365609   \n",
       "min         0.000000       0.000000       0.000000       0.000000   \n",
       "25%         0.000000       0.000000       0.000000       0.000000   \n",
       "50%       130.818318     127.755255     129.542042       0.000000   \n",
       "75%       190.675676     193.355856     190.165165     192.207207   \n",
       "max       255.000000     255.000000     255.000000     255.000000   \n",
       "\n",
       "             DATA[7]  \n",
       "count  818440.000000  \n",
       "mean       93.094805  \n",
       "std       100.186463  \n",
       "min         0.000000  \n",
       "25%         0.000000  \n",
       "50%         0.000000  \n",
       "75%       190.675676  \n",
       "max       255.000000  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "All features are in the same scale of [0,255]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Generate images for each class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df0=df[df['Label']=='R'].drop(['Label'],axis=1)\n",
    "df1=df[df['Label']=='RPM'].drop(['Label'],axis=1)\n",
    "df2=df[df['Label']=='gear'].drop(['Label'],axis=1)\n",
    "df3=df[df['Label']=='DoS'].drop(['Label'],axis=1)\n",
    "df4=df[df['Label']=='Fuzzy'].drop(['Label'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Generate 9*9 color images for class 0 (Normal)\n",
    "count=0\n",
    "ims = []\n",
    "\n",
    "image_path = \"train/0/\"\n",
    "os.makedirs(image_path)\n",
    "\n",
    "for i in range(0, len(df0)):  \n",
    "    count=count+1\n",
    "    if count<=27: \n",
    "        im=df0.iloc[i].values\n",
    "        ims=np.append(ims,im)\n",
    "    else:\n",
    "        ims=np.array(ims).reshape(9,9,3)\n",
    "        array = np.array(ims, dtype=np.uint8)\n",
    "        new_image = Image.fromarray(array)\n",
    "        new_image.save(image_path+str(i)+'.png')\n",
    "        count=0\n",
    "        ims = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Generate 9*9 color images for class 1 (RPM spoofing)\n",
    "count=0\n",
    "ims = []\n",
    "\n",
    "image_path = \"train/1/\"\n",
    "os.makedirs(image_path)\n",
    "\n",
    "for i in range(0, len(df1)):  \n",
    "    count=count+1\n",
    "    if count<=27: \n",
    "        im=df1.iloc[i].values\n",
    "        ims=np.append(ims,im)\n",
    "    else:\n",
    "        ims=np.array(ims).reshape(9,9,3)\n",
    "        array = np.array(ims, dtype=np.uint8)\n",
    "        new_image = Image.fromarray(array)\n",
    "        new_image.save(image_path+str(i)+'.png')\n",
    "        count=0\n",
    "        ims = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Generate 9*9 color images for class 2 (Gear spoofing)\n",
    "count=0\n",
    "ims = []\n",
    "\n",
    "image_path = \"train/2/\"\n",
    "os.makedirs(image_path)\n",
    "\n",
    "for i in range(0, len(df2)):  \n",
    "    count=count+1\n",
    "    if count<=27: \n",
    "        im=df2.iloc[i].values\n",
    "        ims=np.append(ims,im)\n",
    "    else:\n",
    "        ims=np.array(ims).reshape(9,9,3)\n",
    "        array = np.array(ims, dtype=np.uint8)\n",
    "        new_image = Image.fromarray(array)\n",
    "        new_image.save(image_path+str(i)+'.png')\n",
    "        count=0\n",
    "        ims = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Generate 9*9 color images for class 3 (DoS attack)\n",
    "count=0\n",
    "ims = []\n",
    "\n",
    "image_path = \"train/3/\"\n",
    "os.makedirs(image_path)\n",
    "\n",
    "\n",
    "for i in range(0, len(df3)):  \n",
    "    count=count+1\n",
    "    if count<=27: \n",
    "        im=df3.iloc[i].values\n",
    "        ims=np.append(ims,im)\n",
    "    else:\n",
    "        ims=np.array(ims).reshape(9,9,3)\n",
    "        array = np.array(ims, dtype=np.uint8)\n",
    "        new_image = Image.fromarray(array)\n",
    "        new_image.save(image_path+str(i)+'.png')\n",
    "        count=0\n",
    "        ims = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Generate 9*9 color images for class 4 (Fuzzy attack)\n",
    "count=0\n",
    "ims = []\n",
    "\n",
    "image_path = \"train/4/\"\n",
    "os.makedirs(image_path)\n",
    "\n",
    "\n",
    "for i in range(0, len(df4)):  \n",
    "    count=count+1\n",
    "    if count<=27: \n",
    "        im=df4.iloc[i].values\n",
    "        ims=np.append(ims,im)\n",
    "    else:\n",
    "        ims=np.array(ims).reshape(9,9,3)\n",
    "        array = np.array(ims, dtype=np.uint8)\n",
    "        new_image = Image.fromarray(array)\n",
    "        new_image.save(image_path+str(i)+'.png')\n",
    "        count=0\n",
    "        ims = []"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Split the training and test set "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "29227\n"
     ]
    }
   ],
   "source": [
    "# Create folders to store images\n",
    "Train_Dir='./train/'\n",
    "Val_Dir='./test/'\n",
    "allimgs=[]\n",
    "for subdir in os.listdir(Train_Dir):\n",
    "    for filename in os.listdir(os.path.join(Train_Dir,subdir)):\n",
    "        filepath=os.path.join(Train_Dir,subdir,filename)\n",
    "        allimgs.append(filepath)\n",
    "print(len(allimgs)) # Print the total number of images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "#split a test set from the dataset, train/test size = 80%/20%\n",
    "Numbers=len(allimgs)//5 \t#size of test set (20%)\n",
    "\n",
    "def mymovefile(srcfile,dstfile):\n",
    "    if not os.path.isfile(srcfile):\n",
    "        print (\"%s not exist!\"%(srcfile))\n",
    "    else:\n",
    "        fpath,fname=os.path.split(dstfile)    \n",
    "        if not os.path.exists(fpath):\n",
    "            os.makedirs(fpath)               \n",
    "        shutil.move(srcfile,dstfile)          \n",
    "        #print (\"move %s -> %s\"%(srcfile,dstfile))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5845"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The size of test set\n",
    "Numbers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finish creating test set\n"
     ]
    }
   ],
   "source": [
    "# Create the test set\n",
    "val_imgs=random.sample(allimgs,Numbers)\n",
    "for img in val_imgs:\n",
    "    dest_path=img.replace(Train_Dir,Val_Dir)\n",
    "    mymovefile(img,dest_path)\n",
    "print('Finish creating test set')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#resize the images 224*224 for better CNN training\n",
    "def get_224(folder,dstdir):\n",
    "    imgfilepaths=[]\n",
    "    for root,dirs,imgs in os.walk(folder):\n",
    "        for thisimg in imgs:\n",
    "            thisimg_path=os.path.join(root,thisimg)\n",
    "            imgfilepaths.append(thisimg_path)\n",
    "    for thisimg_path in imgfilepaths:\n",
    "        dir_name,filename=os.path.split(thisimg_path)\n",
    "        dir_name=dir_name.replace(folder,dstdir)\n",
    "        new_file_path=os.path.join(dir_name,filename)\n",
    "        if not os.path.exists(dir_name):\n",
    "            os.makedirs(dir_name)\n",
    "        img=cv2.imread(thisimg_path)\n",
    "        img=cv2.resize(img,(224,224))\n",
    "        cv2.imwrite(new_file_path,img)\n",
    "    print('Finish resizing'.format(folder=folder))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finish resizing\n"
     ]
    }
   ],
   "source": [
    "DATA_DIR_224='./train_224/'\n",
    "get_224(folder='./train/',dstdir=DATA_DIR_224)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finish resizing\n"
     ]
    }
   ],
   "source": [
    "DATA_DIR2_224='./test_224/'\n",
    "get_224(folder='./test/',dstdir=DATA_DIR2_224)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Display samples for each category"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 5 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Read the images for each category, the file name may vary (27.png, 83.png...)\n",
    "img1 = Image.open('./train_224/0/27.png')\n",
    "img2 = Image.open('./train_224/1/83.png')\n",
    "img3 = Image.open('./train_224/2/27.png')\n",
    "img4 = Image.open('./train_224/3/27.png')\n",
    "img5 = Image.open('./train_224/4/27.png')\n",
    "\n",
    "plt.figure(figsize=(10, 10)) \n",
    "plt.subplot(1,5,1)\n",
    "plt.imshow(img1)\n",
    "plt.title(\"Normal\")\n",
    "plt.subplot(1,5,2)\n",
    "plt.imshow(img2)\n",
    "plt.title(\"RPM Spoofing\")\n",
    "plt.subplot(1,5,3)\n",
    "plt.imshow(img3)\n",
    "plt.title(\"Gear Spoofing\")\n",
    "plt.subplot(1,5,4)\n",
    "plt.imshow(img4)\n",
    "plt.title(\"DoS Attack\")\n",
    "plt.subplot(1,5,5)\n",
    "plt.imshow(img5)\n",
    "plt.title(\"Fuzzy Attack\")\n",
    "plt.show()  # display it"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
